icontheme: Add a test for lookup order
authorMatthias Clasen <mclasen@redhat.com>
Wed, 14 May 2014 02:13:58 +0000 (04:13 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 14 May 2014 02:28:36 +0000 (04:28 +0200)
Add tests that verify the expected lookup order between -symbolic,
-rtl/-ltr and generic fallback.

gtk/gtkicontheme.c
testsuite/gtk/icontheme.c

index 58f29135c3cc0bc4c56dad9e8c826cb4d95b5aa6..a1687df8147e75444614a4545a2f1c167268187d 100644 (file)
@@ -1659,6 +1659,11 @@ real_choose_icon (GtkIconTheme       *icon_theme,
 
   use_builtin = flags & GTK_ICON_LOOKUP_USE_BUILTIN;
 
+  /* This is used in the icontheme unit test */
+  GTK_NOTE (ICONTHEME,
+            for (i = 0; icon_names[i]; i++)
+              g_print ("\tlookup name: %s\n", icon_names[i]));
+
   /* for symbolic icons, do a search in all registered themes first;
    * a theme that inherits them from a parent theme might provide
    * an alternative highcolor version, but still expect the symbolic icon
index 03927086f98e5d920ca06348dfec6805b872b4bb..4e1a7d8126c8aafd274a13b991937409af393de9 100644 (file)
@@ -89,6 +89,62 @@ assert_icon_lookup_fails (const char         *icon_name,
     }
 }
 
+static GList *lookups = NULL;
+
+static void
+print_func (const gchar *string)
+{
+  if (g_str_has_prefix (string, "\tlookup name: "))
+    {
+      gchar *s;
+      s = g_strchomp (g_strdup (string + strlen ("\tlookup name: ")));
+      lookups = g_list_append (lookups, s);
+    }
+}
+
+static void
+assert_lookup_order (const char         *icon_name,
+                     gint                size,
+                     GtkIconLookupFlags  flags,
+                     const char         *first,
+                     ...)
+{
+  guint debug_flags;
+  GPrintFunc old_print_func;
+  va_list args;
+  const gchar *s;
+  GtkIconInfo *info;
+  GList *l;
+
+  debug_flags = gtk_get_debug_flags ();
+  gtk_set_debug_flags (debug_flags | GTK_DEBUG_ICONTHEME);
+  old_print_func = g_set_print_handler (print_func);
+
+  g_assert (lookups == NULL);
+  
+  info = gtk_icon_theme_lookup_icon (get_test_icontheme (), icon_name, size, flags);
+  if (info)
+    g_object_unref (info);
+  
+  va_start (args, first);
+  s = first;
+  l = lookups;
+  while (s != NULL)
+    {
+      g_assert (l != NULL);
+      g_assert_cmpstr (s, ==, l->data);
+      s = va_arg (args, gchar*);
+      l = l->next;
+    }
+  g_assert (l == NULL);
+  va_end (args);
+
+  g_list_free_full (lookups, g_free);
+  lookups = NULL;
+
+  g_set_print_handler (old_print_func);
+  gtk_set_debug_flags (debug_flags);
+}
 
 static void
 test_basics (void)
@@ -106,6 +162,89 @@ test_basics (void)
   g_test_assert_expected_messages ();
 }
 
+static void
+test_lookup_order (void)
+{
+  assert_lookup_order ("foo-bar-baz", 16, GTK_ICON_LOOKUP_GENERIC_FALLBACK,
+                       "foo-bar-baz",
+                       "foo-bar",
+                       "foo",
+                       NULL);
+  assert_lookup_order ("foo-bar-baz-symbolic", 16, GTK_ICON_LOOKUP_GENERIC_FALLBACK,
+                       "foo-bar-baz-symbolic",
+                       "foo-bar-symbolic",
+                       "foo-symbolic",
+                       "foo-bar-baz",
+                       "foo-bar",
+                       "foo",
+                       NULL);
+
+  assert_lookup_order ("bla-bla", 16, GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_FORCE_SYMBOLIC,
+                       "bla-bla-symbolic",
+                       "bla-symbolic",
+                       "bla-bla",
+                       "bla",
+                       NULL);
+  assert_lookup_order ("bla-bla-symbolic", 16, GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_FORCE_SYMBOLIC,
+                       "bla-bla-symbolic",
+                       "bla-symbolic",
+                       "bla-bla-symbolic", /* awkward */
+                       "bla-symbolic", /* awkward */
+                       "bla-bla",
+                       "bla",
+                       NULL);
+
+  assert_lookup_order ("bar-baz", 16, GTK_ICON_LOOKUP_FORCE_SYMBOLIC|GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_DIR_RTL,
+                       "bar-baz-symbolic-rtl",
+                       "bar-baz-symbolic",
+                       "bar-symbolic-rtl",
+                       "bar-symbolic",
+                       "bar-baz-rtl",
+                       "bar-baz",
+                       "bar-rtl",
+                       "bar",
+                       NULL);
+  assert_lookup_order ("bar-baz-symbolic", 16, GTK_ICON_LOOKUP_FORCE_SYMBOLIC|GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_DIR_RTL,
+                       "bar-baz-symbolic-rtl",
+                       "bar-baz-symbolic",
+                       "bar-symbolic-rtl",
+                       "bar-symbolic",
+                       "bar-baz-symbolic-rtl", /* awkward */
+                       "bar-baz-symbolic", /* awkward */
+                       "bar-symbolic-rtl", /* awkward */
+                       "bar-symbolic", /* awkward */
+                       "bar-baz-rtl",
+                       "bar-baz",
+                       "bar-rtl",
+                       "bar",
+                       NULL);
+
+  assert_lookup_order ("bar-baz", 16, GTK_ICON_LOOKUP_FORCE_SYMBOLIC|GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_DIR_LTR,
+                       "bar-baz-symbolic-ltr",
+                       "bar-baz-symbolic",
+                       "bar-symbolic-ltr",
+                       "bar-symbolic",
+                       "bar-baz-ltr",
+                       "bar-baz",
+                       "bar-ltr",
+                       "bar",
+                       NULL);
+  assert_lookup_order ("bar-baz-symbolic", 16, GTK_ICON_LOOKUP_FORCE_SYMBOLIC|GTK_ICON_LOOKUP_GENERIC_FALLBACK|GTK_ICON_LOOKUP_DIR_LTR,
+                       "bar-baz-symbolic-ltr",
+                       "bar-baz-symbolic",
+                       "bar-symbolic-ltr",
+                       "bar-symbolic",
+                       "bar-baz-symbolic-ltr", /* awkward */
+                       "bar-baz-symbolic", /* awkward */
+                       "bar-symbolic-ltr", /* awkward */
+                       "bar-symbolic", /* awkward */
+                       "bar-baz-ltr",
+                       "bar-baz",
+                       "bar-ltr",
+                       "bar",
+                       NULL);
+}
+
 static void
 test_generic_fallback (void)
 {
@@ -235,7 +374,8 @@ main (int argc, char *argv[])
   gtk_test_init (&argc, &argv);
 
   g_test_add_func ("/icontheme/basics", test_basics);
-  g_test_add_func ("/icontheme/generic_fallback", test_generic_fallback);
+  g_test_add_func ("/icontheme/lookup-order", test_lookup_order);
+  g_test_add_func ("/icontheme/generic-fallback", test_generic_fallback);
   g_test_add_func ("/icontheme/force-symbolic", test_force_symbolic);
   g_test_add_func ("/icontheme/force-regular", test_force_regular);